//#include <iostream>
//using namespace std;
//
//const int N = 1e5 + 10;
//
//int e[N],ne[N],pre[N],id,h,mp[N];
//
//void push_front(int x){
//	id++;
//	mp[x] = id;
//	e[id] = x;
//	pre[id] = h;
//	ne[id] = ne[h];
//	pre[ne[id]] = id;
//	ne[h] = id;
//}
//
//int find(int x){
//	return mp[x];
//}
//
//void print(){
//	for(int i = ne[h];i;i = ne[i]){
//		cout << e[i] << " ";
//	}
//	cout << endl;
//}
//
//void insert_back(int p,int x){
//	id++;
//	e[id] = x;
//	mp[x] = id;
//	pre[ne[p]] = id;
//	ne[id] = ne[p];
//	pre[id] = p;
//	ne[p] = id;
//}
//
//void insert_front(int p,int x){
//	id++;
//	e[id] = x;
//	mp[x] = id;
//	ne[pre[p]] = id;
//	pre[id] = pre[p];
//	ne[id] = p;
//	pre[p] = id;
//} 
//
//void erase(int p){
//	mp[e[p]] = 0;
//	ne[pre[p]] = ne[p];
//	pre[ne[p]] = pre[p];
//} 
//
//int main(){
//	for(int i = 1;i <= 5;i++){
//		push_front(i);
//		print();
//	}
//	
//	cout << find(3) << endl; 
//	cout << find(5) << endl; 
//	cout << find(10) << endl; 
//	
//	insert_back(3,10);
//	print();
//	insert_front(3,33);
//	print();
//	
//	erase(7);
//	print();
//	erase(6);
//	print();
//	return 0;
//} 

#include <iostream>
using namespace std;

const int N = 1e5 + 10;

int e[N],ne[N],mp[N],id,h;

void insert(int x,int y){
	id++;
	e[id] = y;
	mp[y] = id
	ne[id] = ne[mp[x]];
	ne[mp[x]] = id;
}

int find(int x){
	return e[ne[mp[x]]];
}

void erase(int x){
	ne[mp[x]] = ne[ne[mp[x]]];
}

int main(){
	id++;
	e[id] = 1;
	mp[id] = 1;
	int q;
	cin >> q;
	int n,x,y;
	for(int i = 0;i < q;i++){
		cin >> n >> x;
		switch(n){
			case 1:cin >> y;insert(x,y);break;
			case 2:cout << find(x) << endl;break;
			case 3:erase(x);break;
		}
	}
	return 0;
}
